malloc(), calloc() এর পার্থক্য এবং প্রয়োগ

Computer Programming - সি স্ট্যান্ডার্ড লাইব্রেরি রেফারেন্স (C Standard Library Reference) Dynamic Memory Allocation (ডাইনামিক মেমোরি অ্যালোকেশন) |
364
364

malloc() এবং calloc() এর পার্থক্য এবং প্রয়োগ

সি প্রোগ্রামিং ভাষায় malloc() (memory allocation) এবং calloc() (contiguous allocation) ফাংশন দুটি ডাইনামিক মেমোরি বরাদ্দ করার জন্য ব্যবহৃত হয়। তবে, এই দুটি ফাংশনের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে, যা তাদের ব্যবহারকে নির্ধারণ করে।

এখানে malloc() এবং calloc() এর পার্থক্য এবং তাদের প্রয়োগ সম্পর্কে বিস্তারিত আলোচনা করা হলো।


malloc() – মেমোরি বরাদ্দ করা

malloc() ফাংশনটি একটি নির্দিষ্ট আকারের মেমোরি ব্লক বরাদ্দ করে এবং মেমোরির শুরুতে একটি পয়েন্টার রিটার্ন করে। তবে, এটি বরাদ্দ করা মেমোরি ব্লকটি অ্যানডিফাইনড মান (garbage values) দিয়ে পূর্ণ রাখে, অর্থাৎ এতে কোনো প্রাথমিক মান থাকে না।

সিঙ্কট্যাক্স:

void *malloc(size_t size);
  • size – বরাদ্দ করতে চাওয়া মেমোরির আকার (বাইটে)।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    
    // 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
    ptr = (int *)malloc(5 * sizeof(int));  

    if (ptr == NULL) {
        printf("Memory allocation failed.\n");
        return 1;  // মেমোরি বরাদ্দ ব্যর্থ
    }

    // বরাদ্দ করা মেমোরি ব্যবহার
    for (int i = 0; i < 5; i++) {
        ptr[i] = i + 1;
    }

    // আউটপুট
    for (int i = 0; i < 5; i++) {
        printf("%d ", ptr[i]);
    }

    // বরাদ্দকৃত মেমোরি মুক্ত করা
    free(ptr);

    return 0;
}

এখানে malloc() ফাংশনটি 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করেছে, এবং ptr পয়েন্টার দ্বারা সেই মেমোরি অ্যাক্সেস করা হয়েছে।

বৈশিষ্ট্য:

  • malloc() শুধুমাত্র মেমোরি বরাদ্দ করে এবং এটি পূর্ববর্তী মান প্রদান না করে। অর্থাৎ, বরাদ্দ করা মেমোরি ব্লকটি কোনো মান দিয়ে পূর্ণ থাকে না (গার্বেজ মান)।
  • এটি একক আকারে মেমোরি বরাদ্দ করে, যেমন একটি অ্যারে বা স্ট্রাকচার।

calloc() – মেমোরি বরাদ্দ এবং ইনিশিয়ালাইজেশন

calloc() ফাংশনটি মেমোরির একটি ব্লক বরাদ্দ করে এবং সেই মেমোরির প্রতিটি অংশকে শূন্য (0) দিয়ে পূর্ণ করে দেয়। এটি malloc() এর মতো, তবে এটি মেমোরি বরাদ্দ করার পাশাপাশি বরাদ্দকৃত মেমোরি ইনিশিয়ালাইজও করে।

সিঙ্কট্যাক্স:

void *calloc(size_t num, size_t size);
  • num – বরাদ্দ করতে চাওয়া এলিমেন্টের সংখ্যা।
  • size – প্রতিটি এলিমেন্টের আকার (বাইটে)।

উদাহরণ:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *ptr;
    
    // 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ এবং সবগুলোকে শূন্য দিয়ে পূর্ণ করা
    ptr = (int *)calloc(5, sizeof(int));  

    if (ptr == NULL) {
        printf("Memory allocation failed.\n");
        return 1;  // মেমোরি বরাদ্দ ব্যর্থ
    }

    // আউটপুট
    for (int i = 0; i < 5; i++) {
        printf("%d ", ptr[i]);  // সবগুলো ভ্যালু হবে 0
    }

    // বরাদ্দকৃত মেমোরি মুক্ত করা
    free(ptr);

    return 0;
}

এখানে calloc() ফাংশনটি 5টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করেছে এবং সবগুলোকে 0 দিয়ে পূর্ণ করেছে।

বৈশিষ্ট্য:

  • calloc() মেমোরি বরাদ্দ করার পাশাপাশি এটি প্রতিটি ব্লককে শূন্য (0) দিয়ে পূর্ণ করে। এটি মেমোরি ইনিশিয়ালাইজেশন সরবরাহ করে।
  • এটি দুটি আর্গুমেন্ট গ্রহণ করে: একটির মাধ্যমে এলিমেন্টের সংখ্যা এবং অন্যটির মাধ্যমে প্রতিটি এলিমেন্টের আকার।
  • এটি একটি নির্দিষ্ট আকারের মেমোরি ব্লক বরাদ্দ করে, যেমন একটি অ্যারে বা স্ট্রাকচার, এবং ইনিশিয়ালাইজ করা মান 0 হয়।

malloc() এবং calloc() এর মধ্যে পার্থক্য

বৈশিষ্ট্যmalloc()calloc()
ইনিশিয়ালাইজেশনবরাদ্দকৃত মেমোরি ব্লকটি অ্যানডিফাইনড মান (garbage values) দিয়ে পূর্ণ থাকে।বরাদ্দকৃত মেমোরি ব্লকটি শূন্য (0) দিয়ে পূর্ণ থাকে।
আর্গুমেন্টএকক আর্গুমেন্ট (মেমোরির আকার)।দুটি আর্গুমেন্ট (এলিমেন্ট সংখ্যা এবং প্রতিটি এলিমেন্টের আকার)।
প্রকৃতিএকক আকারের মেমোরি বরাদ্দ করে।একটি বৃহৎ ব্লক বরাদ্দ করে এবং প্রতিটি অংশে শূন্য মান স্থাপন করে।
পারফরম্যান্সসাধারণত দ্রুত, কারণ এটি ইনিশিয়ালাইজেশন করে না।কিছুটা ধীর, কারণ এটি মেমোরি ইনিশিয়ালাইজ করে।

সারসংক্ষেপ

ফাংশনকাজসিঙ্কট্যাক্স
malloc()মেমোরি বরাদ্দ করে, কিন্তু ইনিশিয়ালাইজেশন করে নাvoid *malloc(size_t size);
calloc()মেমোরি বরাদ্দ করে এবং ইনিশিয়ালাইজ করে (সব অংশে শূন্য মান স্থাপন)void *calloc(size_t num, size_t size);

malloc() এবং calloc() ফাংশন দুটি ডাইনামিক মেমোরি বরাদ্দ করতে ব্যবহৃত হয়, তবে malloc() মেমোরি বরাদ্দের পর মেমোরি ইনিশিয়ালাইজেশন করে না, এবং calloc() ইনিশিয়ালাইজেশন সহ মেমোরি বরাদ্দ করে (যা সবগুলো এলিমেন্ট শূন্য মান দিয়ে পূর্ণ থাকে)।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion